package com.team.databoard.service;

import com.team.databoard.model.Student;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * @author guojing2003
 * @description 针对表【student】的数据库操作Service
 * @createDate 2024-08-23 19:40:34
 */
public interface StudentService extends IService<Student> {

    // ---------------基本操作----------------

    /**
     * 新增学生
     *
     * @param student 学生实体
     * @return 学生id
     */
    int insertStudent(Student student);

    /**
     * 删除学生
     *
     * @param id 学生id
     * @return 是否删除成功
     */
    boolean deleteStudent(int id);

    /**
     * 更新学生
     *
     * @param student 学生实体
     * @return 是否更新成功
     */
    boolean updateStudent(Student student);

    /**
     * 查询学生
     *
     * @param id 学生id
     * @return 学生实体
     */
    Student selectStudent(int id);

    /**
     * 查询学生列表
     *
     * @param params 查询条件
     * @param page   页码
     * @param size   每页数量
     * @return 学生列表及数据条数
     */
    Map<String, Object> selectStudent(int page, int size, Map<String, Object> params);

    // ---------------统计操作----------------

    /**
     * 姓氏统计
     *
     * @param provinceId 省份id
     * @return 姓氏统计
     */
    List<Map<String, Object>> groupByLastName(Integer provinceId);

    /**
     * 性别统计
     *
     * @param provinceId 省份id
     * @return 性别统计
     */
    Map<String, Integer> groupBySex(Integer provinceId);

    /**
     * 省份统计
     *
     * @param provinceId 省份id
     * @return 省份统计
     */
    Map<String, Integer> groupByProvince(Integer provinceId);

    /**
     * 生日月份统计
     *
     * @param provinceId 省份id
     * @return 生日月份统计
     */
    Map<String, Integer> groupByBirthMonth(Integer provinceId);

    /**
     * 生日年份统计
     *
     * @param provinceId 省份id
     * @return 生日年份统计
     */
    Map<String, Integer> groupByBirthYear(Integer provinceId);

    /**
     * 身高统计
     *
     * @param provinceId 省份id
     * @return 身高统计
     */
    Map<String, Integer> groupByHeight(Integer provinceId);

    /**
     * 学历统计
     *
     * @param provinceId 省份id
     * @return 学历统计
     */
    Map<String, Integer> groupByEducation(Integer provinceId);

    /**
     * 获得学生总人数
     *
     * @return 学生总人数
     */
    int getStudentCount();

    /**
     * 获取实时更新学生列表
     *
     * @return 实时更新学生列表
     */
    Map<String, Object> getUpdateList(int count);
}
